// 给你两个 非空 的链表，表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的，并且每个节点只能存储 一位 数字。

// 请你将两个数相加，并以相同形式返回一个表示和的链表。

// 你可以假设除了数字 0 之外，这两个数都不会以 0 开头。

function ListNode(val, next) {
    this.val = (val === undefined ? 0 : val)
    this.next = (next === undefined ? null : next)
}
l1 = new ListNode();
l1 = new ListNode();
//链表本身就可以处理倒叙数组，因为其从前向后遍历
var addTwoNumbers = function(l1, l2) {
    let cur = new ListNode();
    let res = cur;
    //注意使用变量作为中间量，不能直接处理头节点
    let num1 = num2 = sum = 0;
    let flag = false;
    while (l1 || l2) {
        num1 = 0;
        num2 = 0;
        if (l1 != null) {
            num1 = l1.val;
            l1 = l1.next;
        }
        if (l2 != null) {
            num2 = l2.val;
            l2 = l2.next;
        }
        sum = num1 + num2;
        //两位数相加只需要考虑进1
        if (flag) { sum++ }
        flag = sum >= 10;
        let temp = new ListNode(sum % 10);
        res.next = temp;
        res = res.next;
    }
    if (flag) {
        res.next = new ListNode(1);
    }

    return cur.next;
};